/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.perutaxi.empresa;

import com.perutaxi.entidades.eEmpresa;
import com.perutaxi.entidades.eEmpresaTaxista;
import com.perutaxi.entidades.eTaxistaAuto;
import com.perutaxi.negocio.nEmpresa;
import com.perutaxi.negocio.nEmpresaTaxista;
import com.perutaxi.negocio.nTaxistaAuto;
import com.perutaxi.segu.SessionMBean;
import com.perutaxi.util.GenericMBean;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import org.primefaces.context.RequestContext;

/**
 *
 * @author PeruTaxi
 */
@ManagedBean
@SessionScoped
public class GestionTaxistaMBean extends GenericMBean implements Serializable {

    @ManagedProperty(value = "#{sessionMBean}")
    private SessionMBean sessionMBean;
    private eEmpresaTaxista taxistaFiltro;
    private eEmpresaTaxista taxista;
    private List<eEmpresaTaxista> lista;
    private final String url = "/empresa/gestion/taxista.xhtml";
    private final String urlLista = "/empresa/gestion/listaTaxista.xhtml";
    private int accion;
    private String titulo;
    private int accionDetalle;
    private eEmpresa empresa;
    private Date fechaNacimiento;
    private List<eTaxistaAuto> listaAutos;
    private eTaxistaAuto auto;
    private SelectItem[] siEstadosSexo;
    private SelectItem[] listaColores;
    private SelectItem[] listaMarcas;
    private SelectItem[] listaModelos;

    public GestionTaxistaMBean() {
    }

    public String iniciar() throws Exception {
        this.empresa = nEmpresa.obtenerPorIdUser(this.sessionMBean.getSessionUsuario().getId());
        this.taxistaFiltro = new eEmpresaTaxista();
        this.taxistaFiltro.setDni("");
        this.taxistaFiltro.setEstado(Boolean.TRUE);
        this.lista = null;

        return this.urlLista;
    }

    public void buscar(ActionEvent ae) {
        try {

            this.lista = nEmpresaTaxista.obtenerPorIdEmpresa(this.empresa.getId());
        } catch (Exception e) {
            showError(e.getMessage());
        }
    }

    public String nuevo() {
        this.accion = 1;
        this.titulo = "NUEVO TAXISTA";
        this.taxista = nEmpresaTaxista.inicializar();
        this.taxista.setEmpresa(this.empresa);

        return this.url;
    }

    public void nuevoAuto() {
        this.accionDetalle = 1;
        this.auto = nTaxistaAuto.inicializar();
        this.auto.setEmpTaxista(this.taxista);
    }

    public String editar() {
        this.accion = 2;
        this.titulo = "EDITAR TAXISTA";
        try {
            this.taxista = nEmpresaTaxista.obtenerPorId(this.taxista.getId());
        } catch (Exception e) {
            showError(e.getMessage());
        }

        return this.url;
    }

    public void editarAuto() {
        this.accionDetalle = 2;
        try {
            if (this.auto.getId() != null) {
                this.auto = nTaxistaAuto.obtenerPorId(this.auto.getId());
            }
        } catch (Exception e) {
            showError(e.getMessage());
        }
    }

    public String ver() {
        this.accion = 3;
        this.titulo = "VER TAXISTA";
        try {
            this.taxista = nEmpresaTaxista.obtenerPorId(this.taxista.getId());
        } catch (Exception e) {
            showError(e.getMessage());
        }

        return this.url;
    }

    public void verAuto() {
        this.accionDetalle = 3;
        try {
            if (this.auto.getId() != null) {
                this.auto = nTaxistaAuto.obtenerPorId(this.auto.getId());
            }
        } catch (Exception e) {
            showError(e.getMessage());
        }
    }

    public String guardar() {
        try {
            if (this.accion == 1) {
                Long id = Long.valueOf(nEmpresaTaxista.obtenerTodos().size() + 1);
                this.taxista.setId(id);
                this.taxista.setFechaNacimiento(new Timestamp(this.fechaNacimiento.getTime()));
                if (nEmpresaTaxista.guardar(this.taxista)) {
                    this.empresa.setNroTrabajadores(this.empresa.getNroTrabajadores() + 1);
                    nEmpresa.actualizar(this.empresa);
                    this.empresa = nEmpresa.obtenerPorId(this.empresa.getId());
                    showMessage("SE HA GUARDADO CORRECTAMENTE");
                    return this.editar();
                } else {
                    showError("NO SE HA PODIDO REALIZAR LA OPERACION");
                }
            } else {
                if (nEmpresaTaxista.actualizar(this.taxista)) {
                    this.empresa = nEmpresa.obtenerPorId(this.empresa.getId());
                    showMessage("SE HA GUARDADO CORRECTAMENTE");
                    return this.editar();
                }
            }
        } catch (Exception e) {
            showError(e.getMessage());
        }

        return null;
    }

    public void guardarAuto() {
        RequestContext context = RequestContext.getCurrentInstance();
        boolean resultado = true;
        try {
            if (this.accionDetalle == 1) {
                Long id = Long.valueOf(nTaxistaAuto.obtenerTodos().size() + 1);
                this.auto.setId(id);
                if (nTaxistaAuto.guardar(this.auto)) {
                    this.taxista.setCantAutos(this.taxista.getCantAutos() + 1);
                    nEmpresaTaxista.actualizar(this.taxista);
                    this.taxista = nEmpresaTaxista.obtenerPorId(this.taxista.getId());
                    showMessage("SE HA GUARDADO CORRECTAMENTE");
                } else {
                    showError("NO SE HA PODIDO GUARDAR");
                    resultado = false;
                }
            } else {
                this.auto.setEmpTaxista(this.taxista);
                if (nTaxistaAuto.actualizar(this.auto)) {
                    this.taxista = nEmpresaTaxista.obtenerPorId(this.taxista.getId());
                    showMessage("SE HA GUARDADO CORRECTAMENTE");
                } else {
                    showError("NO SE HA PODIDO GUARDAR");
                    resultado = false;
                }
            }
        } catch (Exception e) {
            showError(e.getMessage());
            resultado = false;
        }
        context.addCallbackParam("CallbackParam", resultado);
    }

    public String retroceder() {
        buscar(null);
        return this.urlLista;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public eEmpresaTaxista getTaxistaFiltro() {
        return taxistaFiltro;
    }

    public void setTaxistaFiltro(eEmpresaTaxista taxistaFiltro) {
        this.taxistaFiltro = taxistaFiltro;
    }

    public eEmpresaTaxista getTaxista() {
        return taxista;
    }

    public void setTaxista(eEmpresaTaxista taxista) {
        this.taxista = taxista;
    }

    public List<eEmpresaTaxista> getLista() {
        return lista;
    }

    public void setLista(List<eEmpresaTaxista> lista) {
        this.lista = lista;
    }

    public int getAccion() {
        return accion;
    }

    public void setAccion(int accion) {
        this.accion = accion;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public eEmpresa getEmpresa() {
        return empresa;
    }

    public void setEmpresa(eEmpresa empresa) {
        this.empresa = empresa;
    }

    public Date getFechaNacimiento() {
        if (this.accion == 2 || this.accion == 3) {
            this.fechaNacimiento = this.taxista.getFechaNacimiento();
        }
        return fechaNacimiento;
    }

    public void setFechaNacimiento(Date fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }

    public List<eTaxistaAuto> getListaAutos() throws Exception {
        return nTaxistaAuto.obtenerPorIdTaxista(this.taxista.getId());
    }

    public void setListaAutos(List<eTaxistaAuto> listaAutos) {
        this.listaAutos = listaAutos;
    }

    public int getAccionDetalle() {
        return accionDetalle;
    }

    public void setAccionDetalle(int accionDetalle) {
        this.accionDetalle = accionDetalle;
    }

    public eTaxistaAuto getAuto() {
        return auto;
    }

    public void setAuto(eTaxistaAuto auto) {
        this.auto = auto;
    }

    public SelectItem[] getSiEstadosSexo() {
        SelectItem[] si = new SelectItem[3];
        si[0] = new SelectItem("H", "HOMBRE");
        si[1] = new SelectItem("M", "MUJER");
        si[2] = new SelectItem("O", "OTRO");
        siEstadosSexo = si;

        return siEstadosSexo;
    }

    public void setSiEstadosSexo(SelectItem[] siEstadosSexo) {
        this.siEstadosSexo = siEstadosSexo;
    }

    public SelectItem[] getListaColores() {
        SelectItem[] si = new SelectItem[5];
        si[0] = new SelectItem("AZUL", "AZUL");
        si[1] = new SelectItem("ROJO", "ROJO");
        si[2] = new SelectItem("NEGRO", "NEGRO");
        si[3] = new SelectItem("BLANCO", "BLANCO");
        si[4] = new SelectItem("PLOMO", "PLOMO");
        this.listaColores = si;

        return listaColores;
    }

    public void setListaColores(SelectItem[] listaColores) {
        this.listaColores = listaColores;
    }

    public SelectItem[] getListaMarcas() {
        SelectItem[] si = new SelectItem[6];
        si[0] = new SelectItem("TOYOTA", "TOYOTA");
        si[1] = new SelectItem("KIA", "KIA");
        si[2] = new SelectItem("CHEVROLET", "CHEVROLET");
        si[3] = new SelectItem("CHERY", "CHERY");
        si[4] = new SelectItem("RENAULT", "RENAULT");
        si[5] = new SelectItem("VOLKSWAGEN", "VOLKSWAGEN");

        this.listaMarcas = si;

        return listaMarcas;
    }

    public void setListaMarcas(SelectItem[] listaMarcas) {
        this.listaMarcas = listaMarcas;
    }

    public SelectItem[] getListaModelos() {
        SelectItem[] si = new SelectItem[5];
        si[0] = new SelectItem("TOYOTA YARIS 2014", "TOYOTA YARIS 2014");
        si[1] = new SelectItem("TOYOTA PRIUS C", "TOYOTA PRIUS C");
        si[2] = new SelectItem("TOYOTA AURIS", "TOYOTA AURIS");
        si[3] = new SelectItem("TOYOTA YARIS SEDAN", "TOYOTA YARIS SEDAN");
        si[4] = new SelectItem("TOYOTA COROLLA", "TOYOTA COROLLA");

        if (this.auto != null) {
            if (this.auto.getMarca().equals("TOYOTA")) {
                si[0] = new SelectItem("TOYOTA YARIS 2014", "TOYOTA YARIS 2014");
                si[1] = new SelectItem("TOYOTA PRIUS C", "TOYOTA PRIUS C");
                si[2] = new SelectItem("TOYOTA AURIS", "TOYOTA AURIS");
                si[3] = new SelectItem("TOYOTA YARIS SEDAN", "TOYOTA YARIS SEDAN");
                si[4] = new SelectItem("TOYOTA COROLLA", "TOYOTA COROLLA");
            } else if (this.auto.getMarca().equals("KIA")) {
                si[0] = new SelectItem("KIA QUORIS", "KIA QUORIS");
                si[1] = new SelectItem("KIA NEW SORENTO", "KIA NEW SORENTO");
                si[2] = new SelectItem("KIA RIO", "KIA RIO");
                si[3] = new SelectItem("KIA PICANTO", "KIA PICANTO");
                si[4] = new SelectItem("KIA CARNIVAL", "KIA CARNIVAL");
            } else if (this.auto.getMarca().equals("CHEVROLET")) {
                si[0] = new SelectItem("CHEVROLET CRUZE", "CHEVROLET CRUZE");
                si[1] = new SelectItem("CHEVROLET AVEO SEDAN", "CHEVROLET AVEO SEDAN");
                si[2] = new SelectItem("CHEVROLET SAIL", "CHEVROLET SAIL");
                si[3] = new SelectItem("CHEVROLET SONIC", "CHEVROLET SONIC");
                si[4] = new SelectItem("CHEVROLET SPARK LT", "CHEVROLET SPARK LT");
            } else if (this.auto.getMarca().equals("CHERY")) {
                si[0] = new SelectItem("CHERY QQ", "CHERY QQ");
                si[1] = new SelectItem("CHERY FACE", "CHERY FACE");
                si[2] = new SelectItem("CHERY SKIN", "CHERY SKIN");
                si[3] = new SelectItem("CHERY FULWIN", "CHERY FULWIN");
                si[4] = new SelectItem("CHERY FULWIN XR", "CHERY FULWIN XR");
            } else if (this.auto.getMarca().equals("RENAULT")) {
                si[0] = new SelectItem("RENAULT SANDERO", "RENAULT SANDERO");
                si[1] = new SelectItem("RENAULT LOGAN", "RENAULT LOGAN");
                si[2] = new SelectItem("RENAULT KOLEOS", "RENAULT KOLEOS");
                si[3] = new SelectItem("RENAULT FLUENCE", "RENAULT FLUENCE");
                si[4] = new SelectItem("RENAULT DUSTER", "RENAULT DUSTER");
            } else if (this.auto.getMarca().equals("VOLKSWAGEN")) {
                si[0] = new SelectItem("VOLKSWAGEN GOL SEDAN", "VOLKSWAGEN GOL SEDAN");
                si[1] = new SelectItem("VOLKSWAGEN PASSAT", "VOLKSWAGEN PASSAT");
                si[2] = new SelectItem("VOLKSWAGEN BORA", "VOLKSWAGEN BORA");
                si[3] = new SelectItem("VOLKSWAGEN POLO", "VOLKSWAGEN POLO");
                si[4] = new SelectItem("VOLKSWAGEN GTI", "VOLKSWAGEN GTI");
            }
        }

        this.listaModelos = si;

        return listaModelos;
    }

    public void setListaModelos(SelectItem[] listaModelos) {
        this.listaModelos = listaModelos;
    }
}
